#句柄类
'''
来标识属性的标识符，项目中所有操作相关的属性应当使用此类
'''
class handle:
    #句柄名
    name:str
    #实际值
    __value=None
    #类型
    vtype:type
    #默认值
    vdef=None
    #最大值
    vmax=None
    #最小值
    vmin=None
    #对象指针
    ptr=None
    #所属字典
    handle_dict:dict
    '''
    初始化
    name:必填参数
    value:设置为此参数，默认值设置为此参数
        value的类型仅支持int、float、str
        若为str，则范围限制无效
    dic:句柄字典指针
    '''
    def __init__(self,name:str="null",vtype:type=str,value=None,dic:dict=None,vmax=None,vmin=None) -> None:
        self.name=name
        self.vtype=vtype
        if(value!=None):
            self.__value=value
            self.vdef=value#如果初始值不为空，默认值会设置为初始值
            self.vtype=type(value)
        self.vmax=vmax
        self.vmin=vmin
        self.ptr=self
        if(dic!=None):
            self.handle_dict=dic
            dic[name]=self#把自己加进去

    #获得和修改句柄的实际值
    def value(self,setValue=None):
        if(setValue!=None):
            if(type(setValue)==int or type(setValue)==float):
                b1=self.vmax==None or setValue<self.vmax
                b2=self.vmin==None or setValue>self.vmin
                if(b1 and b2):
                    self.__value=setValue
                    self.vtype=type(setValue)
            elif(type(setValue)==str):
                self.__value=setValue
                self.vtype=type(setValue)
        
        return self.__value
    #设置最大值，最小值，默认值
    def setting(self,vtype:type=None,vmax=None,vmin=None,vdef=None):
        if(vmax!=None):
            self.vmax=vmax
        if(vmin!=None):
            self.vmin=vmin
        if(vdef!=None):
            self.vdef=vdef
        if(vtype!=None):
            self.vtype=vtype
    #回归默认值
    def default(self):
        self.__value=self.vdef
    def __repr__(self) -> str:
        return self.__str__()
    def __str__(self) -> str:
        return self.name+":"+str(self.__value)
    #静态方法,通过该方法获得1-n个句柄空实例
    def Empty(n:int=None):
        if(n==None):
            return handle("null")
        res:list=[]
        for i in range(0,n):
            res.append(handle("null"))  
        return tuple(res)


        
    